package cn.git.agent.enhance;

import java.lang.reflect.Method;

/**
 * @description: 静态方法的interceptor必须实现此接口
 * @program: bank-credit-sy
 * @author: lixuchun
 * @create: 2024-12-25
 */
public interface StaticMethodAroundInterceptor {

    /**
     * 前置方法
     * @param clazz
     * @param method
     * @param allArguments
     * @param paramTypes
     */
    void beforeMethod(Class clazz,
                      Method method,
                      Object[] allArguments,
                      Class<?>[] paramTypes);

    /**
     * 后置方法,最終通知，不管原方法是否執行都會執行，finally裡面邏輯
     *
     * @param clazz
     * @param method
     * @param allArguments
     * @param paramTypes
     * @param ret
     */
    void afterMethod(Class clazz,
                     Method method,
                     Object[] allArguments,
                     Class<?>[] paramTypes,
                     Object ret);

    /**
     * 异常方法
     * @param clazz
     * @param method
     * @param allArguments
     * @param paramTypes
     * @param t
     */
    void handleMethodException(Class clazz,
                               Method method,
                               Object[] allArguments,
                               Class<?>[] paramTypes,
                               Throwable t);
}
